Yii2 自动存储更新显示数据库时间戳

之前我们terms表中有两个时间字段create_atupdate_at,现在我们来操作一下,使create_atupdate_at在存储时自动更新它的时间戳属性

自动存储更新时间戳属性

这里我们使用TimestampBehavior先不要管行为不行为,今天就是要时间戳属性自动存储更新

方式一

现在我们开始操作/thesaurus/frontend/models/Terms.php,首先别忘了

1
use yii\behaviors\TimestampBehavior;

然后定义方法behaviors

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* @inheritdoc
*/
public function behaviors()
{
return [
[
'class' => TimestampBehavior::className(),
'attributes' => [
# 添加之前
ActiveRecord::EVENT_BEFORE_INSERT => ['create_at', 'update_at'],
# 修改之前
ActiveRecord::EVENT_BEFORE_UPDATE => ['update_at']
],
# 字段值
'value' => time()
]
];
}

方式二

配合下面的 afterFind 格式化时间最佳

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* @inheritdoc
*/
public function rules()
{
return [
# 自动补全添加时间和修改时间,配合 afterFind 方法转换格式化时间
['create_at', 'filter', 'filter' => function () {
return $this->create_at ? strtotime($this->create_at) : time();
}],
['update_at', 'filter', 'filter' => function () {
return $this->update_at ? strtotime($this->update_at) : time();
}],
[['name'], 'required'],
[['create_at', 'update_at'], 'integer'],
[['name'], 'string', 'max' => 32],
];
}

这个完成以后我们打开/thesaurus/frontend/views/terms/create.php
看到以下代码

1
2
3
<?= $this->render('_form', [
'model' => $model,
]) ?>

然后我们找到/thesaurus/frontend/views/terms/_form.php,把Form表单的create_atupdate_at的input框删除掉,只留下name

然后我们打开local.thef.com/index.php?r=terms,点击Create Terms按钮,表单页面是不是只剩下name一览了,添加一个试试

显示格式化时间

再让我们回到local.thef.com/index.php?r=terms,是不是已经有我们已经添加的数据了,但是时间是有了,感觉有点不对啊,我也觉得是,有办法
继续打开/thesaurus/frontend/models/Terms.php
添加如下方法

1
2
3
4
5
6
7
8
9
/**
* @inheritdoc
*/
public function afterFind()
{
parent::afterFind();
$this->create_at = date('Y-m-d H:i:s', $this->create_at);
$this->update_at = date('Y-m-d H:i:s', $this->update_at);
}

再回头我们的local.thef.com/index.php?r=terms,这下是不是就看着顺眼了.虽然格式化时间的方法很多,但是我觉得这个够了….

坚持原创技术分享,您的支持将鼓励我继续创作!